package com.spark.common.utils;

import com.alibaba.fastjson2.JSONArray;
import com.spark.common.constants.CacheConstants;
import com.spark.common.core.entity.system.SysParams;
import com.spark.common.exception.SparkException;

import java.util.ArrayList;
import java.util.Collection;
import java.util.List;
import java.util.Objects;

/**
 * 系统参数工具类
 *
 * @author LYCHEE
 * @date 2025/3/24 10:57
 */
public class ParamsUtils {

    /**
     * 设置系统参数缓存
     * @param belongKey 缓存的Key
     * @param params 缓存的数据
     */
    public static void setParamsCache(String belongKey, List<SysParams> params){
        SpringUtils.getBean(RedisUtils.class).set(CacheConstants.spliceCacheKey(CacheConstants.SYS_PARAMS_KEY,belongKey), params);
    }

    /**
     * 根据key获取一组系统参数
     * @param belongKey key
     * @return 系统参数数据
     */
    public static List<SysParams> getGroupParamsByKey(String belongKey) {
        JSONArray arr = SpringUtils.getBean(RedisUtils.class).get(CacheConstants.spliceCacheKey(CacheConstants.SYS_PARAMS_KEY,belongKey));
        if (Objects.nonNull(arr)){
            return arr.toJavaList(SysParams.class);
        }
        return null;
    }

    /**
     * 获取所有的系统参数
     * @return 系统参数集合
     */
    public static List<SysParams> getAllParams() {
        List<SysParams> result = new ArrayList<>();
        Collection<String> keys = SpringUtils.getBean(RedisUtils.class).keys(CacheConstants.spliceCacheKey(CacheConstants.SYS_PARAMS_KEY,"*"));
        for (String key : keys) {
            JSONArray arr = SpringUtils.getBean(RedisUtils.class).get(key);
            if (Objects.nonNull(arr)){
                List<SysParams> params = arr.toJavaList(SysParams.class);
                result.addAll(params);
            }
        }
        return result;
    }

    /**
     * 配置项字段获取参数信息
     * @param configField 配置项字段
     * @return 参数实体
     */
    public static SysParams getParamsByConfigField(String configField) {
        List<SysParams> allParams = getAllParams();
        for (SysParams allParam : allParams) {
            if (configField.equals(allParam.getConfigField())){
                return allParam;
            }
        }
        return null;
    }

    /**
     * 通过配置项字段获取输入的值
     * @param configField 配置项字段
     * @return 输入的值
     */
    public static String getInputValByConfigField(String configField) {
        SysParams paramsByConfigField = getParamsByConfigField(configField);
        if (Objects.isNull(paramsByConfigField)){
            throw new SparkException("没有查找到：".concat(configField) + " 的配置项");
        }
        return paramsByConfigField.getInputVal();
    }

    /**
     * 清空参数缓存
     */
    public static void clearParamsCache(){
        Collection<String> keys = SpringUtils.getBean(RedisUtils.class).keys(CacheConstants.spliceCacheKey(CacheConstants.SYS_PARAMS_KEY,"*"));
        SpringUtils.getBean(RedisUtils.class).dels(keys);
    }

}
